﻿var Validations = Validations || {};

$(document).ready(function() {

    $("[data-attach]").each(function(){
        var e = $(this);
        if(e.is("input")) {
            var f = function() { 
                var e = $(this);
                var a = $("#"+e.data('attach'));
                a.val(e.val());
             };
            e.keydown(f).blur(f).change(f);    
        }
        else if(e.is("select")) {
            var f = function() { 
                var e = $(this);
                var a = $("#"+e.data('attach'));
                a.val(e.val());
             };
            e.blur(f).change(f);    
        }
    });

    // Campos validables
    $("[data-valid]").each(function() {
        var e = $(this);
        var ns = e.data('valid').split(',');
        
        e.attr('data-verif', 0);
        
        for(var i in ns) {
            var n = ns[i];
        
            if(typeof Validations[n] === 'undefined')
                return;
            
            var m = e.data('msg');
            
            if(typeof m === 'undefined') {
                m = Validations[n].m;
                e.data('msg', m);
            }
            
            var v = Validations[n].v;
            
            if(v) {
                e.data('v', v);
            
                if(e.is("input")) {
                    var f = function() { 
                        var e = $(this);
                        var x = e.val(); 
                        var v = e.data('v'); 
                        var m = e.data('msg'); 
                        var a = e.data('arg'); 
                        s(e, v(x, a), m);
                     };
                    e.keydown(f).blur(f).change(f);    
                }
            }
        } // For
        
        
    });
});

/**
 *  
 *  @param {number} typ -1: no validable, 0: error, 1: success, 2: validando
 */
function s(e, typ, msg) {
    if(typeof e === 'string') {
        e = $("#"+e);
    }
    
    var p1 = e.parent();
    var p2 = p1.parent();
    var span = p1.find("span");
    
    if(typeof typ === 'string') {
        typ = parseInt(typ);
    }
    else if(typeof typ === 'boolean') {
        typ = typ ? 1 : 0;
    }
    
    e.attr('data-verif', typ);
    
    if(typ == 0) 
    {
        span.html(msg).addClass("in");
        p2.addClass("error").removeClass("success"); 
    }
    else
    {
        p2.removeClass("error"); 
        
        if(typ == 1) {
            span.html("Verificado").addClass("in");
            p2.addClass("success"); 
        }
        else if(typ == 2) {
            span.html("Validando...").addClass("in");
            p2.removeClass("error").removeClass("success"); 
        }
        else {
            span.removeClass("in");
            p2.removeClass("success"); 
        }
    }
}